const jwt = require('jsonwebtoken'); // 用于签发、解析`token`
const jwtKoa = require('koa-jwt'); // 用于路由权限控制

const config = require('../config/index');

/* jwt密钥 */
const secret = config.secret;

const jwtRoute = jwtKoa({ secret: secret }).unless({
  // 设置login、register接口，可以不需要认证访问
  path: [
      /^\/api\/login/,
      /^\/api\/register/,
      /^((?!\/api).)*$/   // 设置除了私有接口外的其它资源，可以不需要认证访问
  ]
})

/* 获取一个期限为4小时的token */
function getToken(payload = {}) {
  return jwt.sign(payload, secret, { expiresIn: '4h' });
}

/* 通过token获取JWT的payload部分 */
function getJWTPayload(token) {
  // token = token.split(' ')[1];
  token = token.replace(/Bearer\s+/gi, '');
  // 验证并解析JWT
  return jwt.verify(token, secret);
}

module.exports = {
  jwtRoute,
  getToken,
  getJWTPayload
};


